export function maskPhoneNumber(phone:string) {
    return phone.slice(0, 3) + '****' + phone.slice(7);
  }
  

  /**
 * 校验身份证号是否合规（18位、15位）
 * @param {String|Number} value 身份证号
 * @return {Boolean} true-合规 false-不合规
 */
export function checkPsidno(value:string) {
  const psidno = String(value);
  // 1.校验身份证号格式和长度
  const regPsidno = /^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[X])$)$/;
  if (!regPsidno.test(psidno)) {
      return false;
  }
  // 2.校验前两位的省份编码是否正确（可选，需要维护省份编码表）
  // const province = { 11: '北京', 12: '天津', ... };
  // if (!province[Number(psidno.slice(0, 2))]) {
  //     return false;
  // }
  // 3.校验出生日期
  if (psidno.length === 15) {
      // 15位号码 省（2位）市（2位）县（2位）年（2位）月（2位）日（2位）校验码（3位）
      const reg = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);
      const arrSplit = psidno.match(reg);
      // 15位号码在年份前补 19 或 20
      const year = Number(arrSplit[2].charAt(0)) > 0 ? '19' + arrSplit[2] : '20' + arrSplit[2];
      const month = arrSplit[3];
      const day = arrSplit[4];
      if (!validateBirthday(year, month, day)) {
          return false;
      }
  } else if (psidno.length === 18) {
      // 18位号码 省（2位）市（2位）县（2位）年（4位）月（2位）日（2位）校验码（4位）
      const reg = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
      const arrSplit = psidno.match(reg);
      const year = arrSplit[2];
      const month = arrSplit[3];
      const day = arrSplit[4];
      if (!validateBirthday(year, month, day)) {
          return false;
      }
  } else {
      return false;
  }
  // 4.18位号码校验生成的校验码
  if (psidno.length === 18) {
      const Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; // 加权因子
      const parity = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']; // 校验码
      let sum = 0;
      for (let i = 0; i < 17; i++) {
          sum += Number(psidno.charAt(i)) * Wi[i];
      }
      if (parity[sum % 11] !== psidno[17]) {
          return false;
      }
  }
  return true;
}

/**
* 校验出生日期是否合理
* @param {Number} year 年
* @param {Number} month 月
* @param {Number} day 日
* @return {Boolean} true-合理 false-不合理
*/
function validateBirthday(year, month, day) {
  year = Number(year); // 年
  month = Number(month); // 月
  day = Number(day); // 日
  const nowTime = new Date().getTime(); // 当前时间戳
  const birthTime = new Date(`${year}-${month}-${day}`).getTime(); // 获取出生日期的时间戳
  // 不能是未来出生的
  if (birthTime > nowTime) {
      return false;
  }
  // 一般人活不到150岁
  const nowYear = new Date().getFullYear();
  if ((nowYear - year) > 150) {
      return false;
  }
  // 不能是13月出生的
  if (month < 1 || month > 12) {
      return false;
  }
  // 不能是2月30号、4月31号、5月32号出生的
  const date = new Date(year, month, 0); // 获取当月的最后一天
  if (day < 1 || day > date.getDate()) {
      return false;
  }
  return true;
}



/**
 * 通用脱敏函数：用于手机号、身份证号等
 * @param {string} str 原始字符串
 * @param {number} frontLen 保留前几位
 * @param {number} endLen 保留后几位
 * @returns {string} 脱敏后的字符串
 */
export function desensitize(str, frontLen, endLen) {
    if (!str || typeof str !== 'string') return '';
  
    const len = str.length;
    if (frontLen + endLen >= len) return '*'.repeat(len); // 太短时全部脱敏
  
    const maskedLen = len - frontLen - endLen;
    const masked = '*'.repeat(maskedLen);
    return str.slice(0, frontLen) + masked + str.slice(len - endLen);
  }
  